﻿#pragma once

#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osgGA/GUIEventAdapter>
#include <osgGA/TrackballManipulator>
#include <osgViewer/ViewerEventHandlers>
#include <osg/MatrixTransform>
#include <osg/PositionAttitudeTransform>

#ifdef NODE_MATRIX

#else
#define NODE_MATRIX __declspec(dllimport)
#endif

class NodeMatrix : public osg::MatrixTransform
{
public:
	NodeMatrix();
	~NodeMatrix();

public:
	/**设置当前模型转动方式*/
	void rotating(const osg::Vec3d& pivot, const osg::Vec3d& axis, float angularVelocity);

	/**旋转模型*/
	void toRotate(const osg::Matrix& mat);

	/**
	* @brief 旋转模型
	* @param angle 旋转角度 (弧度制)
	* @param axis 旋转轴
	*/
	void toRotate(float angle, const osg::Vec3f& axis);

	/**缩放模型*/
	void toScale(const osg::Matrix& mat);

	/**
	* @brief 缩放模型
	* @param lel 缩放比例（等比缩放）
	*/
	void toScale(float lel);

	/**addsChild方法*/
	void addsChild(osg::Node* node);

	/**
	* @brief 将模型移动到指定位置
	*/
	void toPosition(const osg::Vec3d& pos);

	/**
	* @brief 得到当前模型的位置
	*/
	osg::Vec3d getPosition();

	/**
	* @brief 限制模型的大小
	*/
	void adapt(osg::BoundingSphere& sps);

	/**
	* @brief 限制模型的大小
	*/
	void adapt(osg::Node* node);

private:
	osg::ref_ptr<osg::MatrixTransform> pat;
	osg::BoundingSphere ps;
	osg::Node* pnode = nullptr;
	float level;
	osg::Vec3d position;
};